package cn.jingyuan.swan.cloud.oauth2.client;

import java.util.Map;

/**
 * 三方登录接口
 */
public interface DefaultOAuth2ClientService {

    /**
     * 根据 code 获得 token
     *
     * @param code code
     *
     * @return token
     */
    String getAccessToken(String code);

    /**
     * 根据 token 获得 openId
     *
     * @param accessToken token
     *
     * @return openId
     */
    String getOpenId(String accessToken);

    /**
     * 拼接授权 URL
     *
     * @return URL
     */
    String getAuthorizationUrl();

    /**
     * 根据 token 和 openId 获得用户信息
     *
     * @param accessToken token
     * @param openId openId
     *
     * @return 第三方应用给的用户信息
     */
    Map<String, Object> getUserInfo(String accessToken, String openId);

    /**
     * 刷新 token
     *
     * @param code code
     *
     * @return 新的 token
     */
    String refreshToken(String code);

    /**
     * 获取登录成功地址
     *
     * @return 登录成功地址
     */
    String getLoginSuccessUrl();

    /**
     * 获取客户端配置信息
     *
     * @return 客户端配置信息
     */
    DefaultOAuth2ClientDetails getClientDetails();

}
